package model.comunication;

import java.util.Calendar;
import java.util.List;

import model.Alumno;
import model.dba.AlumnoDAO;

public class IAlumno {

	private static IAlumno alumnoInterface;
	private AlumnoDAO alumnoDAO;

	private IAlumno() {
		this.alumnoDAO = AlumnoDAO.getInstance();
	}

	public static IAlumno getInstance() {
		if (alumnoInterface == null) {
			alumnoInterface = new IAlumno();
		}
		return alumnoInterface;
	}

	/**
	 * Crea el objeto
	 * 
	 * @param nombre
	 * @param apellido
	 * @param email
	 * @param telefono
	 * @param celular
	 * @param nacimiento
	 * @param DNI
	 * @param id
	 * @return
	 */
	public Alumno getAlumno(String nombre, String apellido, String email, String telefono, String celular, Calendar nacimiento, String DNI, Integer id) {
		return new Alumno(nombre, apellido, email, telefono, celular, nacimiento, DNI, id);
	}

	/**
	 * Crea el objeto
	 * 
	 * @param nombre
	 *            obligatorio
	 * @param apellido
	 *            obligatorio
	 * @param email
	 *            obligatorio o
	 * @param telefono
	 *            obligatorio
	 * @param celular
	 * @param nacimiento
	 * @param DNI
	 * @return
	 */
	public Alumno getAlumno(String nombre, String apellido, String email, String telefono, String celular, Calendar nacimiento, String DNI) {
		return new Alumno(nombre, apellido, email, telefono, celular, nacimiento, DNI);
	}

	/**
	 * Va contra la base de datos y obtiene el objeto
	 * 
	 * @param id
	 * @return
	 */
	public Alumno getAlumno(Integer id) {
		return this.alumnoDAO.getAlumno(id);
	}

	/**
	 * Va contra la base de datos y obtiene el objeto CUALQUIERA DE LOS CAMPOS
	 * 
	 * @param nombre
	 * @param apellido
	 * @param telefono
	 * @param email
	 * @return
	 */
	public List<Alumno> getAlumno(String nombre, String apellido, String telefono, String email) {

		return this.alumnoDAO.getAlumno(nombre, apellido, telefono, email);
	}

	/**
	 * Va contra la base de datos y obtiene el objeto
	 * 
	 * @param id
	 * @return
	 */
	public List<Alumno> getAllAlumnos() {
		return this.alumnoDAO.getAll();
	}

	/**
	 * Va contra la base de datos y obtiene el objeto
	 * 
	 * @param id
	 * @return
	 */
	public List<Alumno> findAlumnos(String nombre, String apellido, String direccion, String telefono) {
		return this.alumnoDAO.find(nombre, apellido, direccion, telefono);
	}

	/**
	 * Va contra la base de datos y obtiene el objeto
	 * 
	 * @param alumno
	 * 
	 * @return
	 */
	public Integer addAlumno(Alumno alumno) {
		return this.alumnoDAO.add(alumno);

	}

	/**
	 * Va contra la base de datos y obtiene el objeto
	 * 
	 * @param alumno
	 * @return
	 */
	public boolean deleteAlumno(Alumno alumno) {
		return this.alumnoDAO.delete(alumno);

	}

	/**
	 * Va contra la base de datos y obtiene el objeto
	 * 
	 * @param alumno
	 * @return
	 */
	public boolean updateAlumno(Alumno alumno) {
		return this.alumnoDAO.update(alumno);

	}
}
